/*
 * Font.java
 *
 * Created on 2005/02/19 +0900
 *
 * $Revision: 58 $
 * $Date: 2008-12-06 08:59:45 +0000 (Sat, 06 Dec 2008) $
 */

package org.gikolet.framework.ui;

/**
 * フォントを表すインタフェース。フォントは論理的なフォントで物理的なフォントは扱えない。 <br>
 * ただ、サイズに関しては端末によっては物理サイズを指定できる。<br>
 * 実際にはこのクラスを継承して、機種依存部とのすり合せを行う。<br>
 *
 * @author Tetsutaro (latest modification by $Author: tetsutaro.ss $)
 * @version $Revision: 58 $ $Date: 2008-12-06 08:59:45 +0000 (Sat, 06 Dec 2008) $
 */
public interface Font {
    /** モノスペースフォントフェイス */
    int FACE_MONOSPACE = 0x001;

    /** プロポーショナルフォントフェイス */
    int FACE_PROPORTIONAL = 0x002;

    /** システムフォントフェイス */
    int FACE_SYSTEM = 0x004;

    /** ボールドフォントスタイル */
    int STYLE_BOLD = 0x008;

    /** イタリックフォントスタイル */
    int STYLE_ITALIC = 0x010;

    /** プレーンフォントスタイル */
    int STYLE_PLAIN = 0x020;

    /** アンダーラインフォントスタイル */
    int STYLE_UNDERLINED = 0x040;

    /** ラージフォントサイズ */
    int SIZE_LARGE = -1;

    /** ミディアムフォントサイズ */
    int SIZE_MEDIUM = -2;

    /** スモールフォントサイズ */
    int SIZE_SMALL = -3;

    /** タイニーフォントサイズ */
    int SIZE_TINY = -4;

    /*
     * このフォントのフェイスを返す。
     */
    int getFace();

    /*
     * このフォントのスタイルを組み合わせた値で返す。
     */
    int getStyle();

    /*
     * このフォントがプレーンスタイルかを返す。
     */
    boolean isPlain();

    /*
     * このフォントがボールドスタイルかを返す。
     */
    boolean isBold();

    /*
     * このフォントがイタリックスタイルかを返す。
     */
    boolean isItalic();

    /*
     * このフォントがアンダーラインスタイルかを返す。
     */
    boolean isUnderlined();

    /*
     * このフォントのサイズを返す。
     */
    int getSize();

    /*
     * このフォントのベースラインを返す。
     */
    int getBaselinePosition();

    /*
     * このフォントの高さを返す。
     */
    int getHeight();

    /*
     * このフォントでの引数cの幅を返す。
     */
    int charWidth(char c);

    /*
     * このフォントでの引数strの幅を返す。
     */
    int stringWidth(String str);

    /*
     * このフォントでの引数strのoffsetからlenghtぶんの文字列の幅を返す。
     */
    int substringWidth(String str, int offset, int lenght);
}
